package com.tencent.wxpay.protocol.request;

import com.tencent.wxpay.common.Signature;

import java.io.Serializable;

/**
 * 下载对账单接口请求数据对象
 */
public class DownloadBillReqData extends BaseReqData implements Serializable {
    private static final long serialVersionUID = -7419198614569140274L;
    /**
     * 设备号
     * 必填：否
     * 描述：微信支付分配的终端设备号
     */
    private String device_info;
    /**
     * 对账单日期
     * 必填：是
     * 描述：下载对账单的日期，格式：20140603
     */
    private String bill_date;
    /**
     * 账单类型
     * 必填：是
     * 描述：ALL，返回当日所有订单信息，默认值
     * SUCCESS，返回当日成功支付的订单
     * REFUND，返回当日退款订单
     */
    private String bill_type;

    /**
     * 请求下载对账单接口的构造方法
     *
     * @param billDate 下载对账单的日期，格式：yyyyMMdd 例如：20140603
     * @param billType 账单类型
     *                 ALL，返回当日所有订单信息，默认值
     *                 SUCCESS，返回当日成功支付的订单
     *                 REFUND，返回当日退款订单
     *                 REVOKED，已撤销的订单
     */
    public DownloadBillReqData(String billDate, BillType billType) {
        super();
        this.bill_date = billDate;
        this.bill_type = billType.toString();
        setSign(Signature.getSign(toMap(this)));
    }

    /**
     * 请求下载对账单接口的构造方法
     *
     * @param deviceInfo 商户自己定义的扫码支付终端设备号，方便追溯这笔交易发生在哪台终端设备上
     * @param billDate   下载对账单的日期，格式：yyyyMMdd 例如：20140603
     * @param billType   账单类型
     *                   ALL，返回当日所有订单信息，默认值
     *                   SUCCESS，返回当日成功支付的订单
     *                   REFUND，返回当日退款订单
     *                   REVOKED，已撤销的订单
     */
    public DownloadBillReqData(String deviceInfo, String billDate, BillType billType) {
        super();
        this.device_info = deviceInfo;
        this.bill_date = billDate;
        this.bill_type = billType.toString();
        setSign(Signature.getSign(toMap(this)));
    }

    /**
     * 账单类型
     */
    public enum BillType {
        ALL, // 返回当日所有订单信息
        SUCCESS, // 返回当日成功支付的订单
        REFUND // 返回当日退款订单
    }

    public String getDevice_info() {
        return device_info;
    }

    public void setDevice_info(String device_info) {
        this.device_info = device_info;
    }

    public String getBill_date() {
        return bill_date;
    }

    public void setBill_date(String bill_date) {
        this.bill_date = bill_date;
    }

    public String getBill_type() {
        return bill_type;
    }

    public void setBill_type(String bill_type) {
        this.bill_type = bill_type;
    }
}
